package cn.skylark.wcm.service;

import cn.skylark.wcm.common.util.ReturnMap;
import cn.skylark.wcm.entity.Filetable;
import cn.skylark.wcm.entity.User;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 *  *Description:网页管理
 *  *
 *  *Copyright:wcm
 *  *@author 武文旭
 *  *@version 1.0 
 *
 * @date 2018/01/08
 *  
 */
public interface FileUploadService {

    /**
     * @param filename
     * @return
     */
    Filetable findByFilename(String filename);

    /**
     * @param file
     */
    void uploadFile(Filetable file);

    /**
     * 上传html文件
     *
     * @param multipartFileList
     * @param localPath
     * @param realPath
     * @param user
     * @param father
     * @param para
     * @param type
     * @return
     */
    Map<String, Object> uploadFileLocal(List<MultipartFile> multipartFileList, String localPath, String realPath, User user, String father, String para, Integer type);

    /**
     * 上传网页
     *
     * @param htmlfile
     * @param htmlname
     * @param user
     * @param father
     * @param realPath
     * @return
     */
    Map<String, Object> uploadFileHtmlLocal(String htmlfile, String htmlname, User user, String father, String realPath);

    /**
     * 查询文件夹是否存在
     *
     * @param filetable
     * @return
     */
    Integer selectFolderById(Filetable filetable);

    /**
     * 取得数据库中的文件列表
     *
     * @param tenanid 租户ID
     * @return 数据库中文件列表
     */
    ReturnMap getFileByTenanid(Integer tenanid);

    /**
     * 新建文件夹
     *
     * @param filetable
     */
    void saveFolder(Filetable filetable);

    /**
     * 获取租户存在空间
     *
     * @param tenanid
     * @return
     */
    String getTotalSize(Integer tenanid);

    /**
     * 上传视频文件
     *
     * @param multipartFileList
     * @param localPath
     * @param realPath
     * @param user
     * @param father
     * @param type
     * @return
     */
    ReturnMap uploadVideoFileLocal(List<MultipartFile> multipartFileList, String localPath, String realPath, User user, String father, Integer type);

    /**
     * 获取html的内容
     *
     * @param filetable
     * @return
     */
    Filetable getHtmlContent(Filetable filetable);

    /**
     * 分页查询用户html的文件
     *
     * @param filetable
     * @param flag
     * @param start
     * @param length
     * @return
     */
    Map<String, Object> selectByPage(Filetable filetable, String flag, String search, int start, int length);

    /**
     * 分页查询用户html文件夹内的信息
     *
     * @param filetable
     * @param start
     * @param length
     * @return
     */
    Map<String, Object> selectByPageFolder(Filetable filetable, String searchValue, int start, int length);

    /**
     * 文件删除
     *
     * @param filename 文件名称包含相对路径
     * @return 返回结果
     */
    ReturnMap deleteFile(String filename, User user);

    /**
     * 删除数据库中文件信息
     *
     * @param doc
     */
    void deleteFile(Filetable doc);

    /**
     * 查询文件是否存在
     *
     * @return
     */
    Integer selectFileName(Filetable filetable);

    /**
     * 下载文件
     *
     * @param id
     * @param realPath
     * @param user
     * @param type
     * @return
     */
    ReturnMap downloadFile(Integer id, String realPath, User user, String type);

    /**
     * 下载html文件
     *
     * @param id       文件id
     * @param realPath 真实路径
     * @param user     用户信息
     * @param type     类型
     * @return
     */
    ReturnMap downloadRemoteHtml(Integer id, String realPath, User user, String type);

    /**
     * 检查文件是否存在
     *
     * @param filename
     * @param tenanid
     * @param userid
     * @param type
     * @return
     */
    boolean selectFileRepeat(String filename, Integer tenanid, Integer userid, Integer type);

    /**
     * 文件回退
     *
     * @param filetable
     * @param flag
     * @param searchValue
     * @param start
     * @param length
     * @return
     */
    PageInfo<Filetable> backoffHtml(Filetable filetable, String flag, String searchValue, Integer start, Integer length);

    /**
     * 新建文件夹进数据库
     *
     * @param tmpFilename
     * @param llocalpath
     * @param tenanid
     * @param userid
     * @param type
     * @param father
     */
    void insertFolder(String tmpFilename, String llocalpath, Integer tenanid, Integer userid, Integer type, String father);

    /**
     * 上传已经拆分后的html文件
     *
     * @param filename 本地的文件路径
     * @param user     用户信息
     * @param realPath 本地的真实路径
     */
    Filetable uploadConvert(String filename, String realPath, User user);

    /**
     * 删除一个文件夹下的所有的文件和文件夹
     *
     * @param file 文件的真实路径的文件
     */
    void deleteAllFile(File file);

    /**
     * 删除云服务上的文件
     *
     * @param cosPath 文件路径
     * @param user    用户信息
     */
    void deleteRemotdFile(String cosPath, User user);

    /**
     * 下载txt文件，并转存服务器
     *
     * @param list
     * @param localPath
     */
    void downloadTxT(List<Filetable> list, String localPath);

    /**
     * 下载html文件，并转存服务器
     *
     * @param list
     * @param localPath
     */
    void downloadHTML(List<Filetable> list, String localPath);

    /**
     * 远端连接
     *
     * @param htmlPath
     */
    void remoteConnection(String htmlPath);

    /**
     * 字符串写入html文件
     *
     * @param tempFile 写入的地址
     * @param dest     字符串
     */
    void writeFile(String tempFile, String dest);

    /**
     * 获取数据库文件对象
     *
     * @param filetable
     * @return
     */
    Filetable getFiletable(Filetable filetable);

    /**
     * 彻底删除表中和文件数据
     *
     * @param filetable
     */
    void deleteFileThorough(Filetable filetable);

    /**
     * 创建文件夹
     * @param tenanid 租户id
     * @param userid 用户id
     * @param path 文件夹路径
     * @param father father
     * @param type 种类
     */
    void  createFolder(Integer tenanid, Integer userid, String path, String father, Integer type);
    /**
     * 删除html网页信息
     * @param filetable
     */
    void deleteHtml(Filetable filetable);

    /**
     * 上传txt
     * @param htmlStr html的字符串
     * @param filename html的名字
     * @param uuid  上传到云存储的uuid
     * @param user 用户对象
     */
    void uploadOrginalTxt(String htmlStr,String filename,String uuid,User user);
    /**
     * 获取html文件的内容
     *
     * @param inputStream
     */
    String getHTMLTEXT(InputStream inputStream);
    /**
     * 删除txt
     * @param textMessage
     */
    void deleteTxt(Filetable textMessage);
}
